package com.icebartech.core.utils;

/**
 * 地图计算相关类
 * @author HG
 *
 */
public class EarthMapUtils {
	
	private static  double EARTH_RADIUS = 6378.137;//地球半径
	
	private static double rad(double d)
	{
	   return d * Math.PI / 180.0;
	}
	
	/**
	 * 根据两点的经纬度计算距离
	 * @param lat1 经度1
	 * @param lng1 纬度1
	 * @param lat2 经度2
	 * @param lng2 纬度2
	 * @return
	 */
	public static double getDistance(Double lat1, Double lng1, Double lat2, Double lng2)
	{
		
	   if(lat1 ==null || lng1==null)//超过经纬度则返回距离为-1，表示无法计算距离
			   return -1;
	   if(lat1.doubleValue() >360 || lng1.doubleValue() > 360)//超过经纬度则返回距离为-1，表示无法计算距离
		   return -1;
	   
	   double radLat1 = rad(lat1);
	   double radLat2 = rad(lat2);
	   double a = radLat1 - radLat2;
	   double b = rad(lng1) - rad(lng2);

	   double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) + Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
	   s = s * EARTH_RADIUS;
	   s = Math.round(s * 10000) / 10d;
	   
	   return s;
	}
	
	public static void main(String[] args) {
		System.out.println(getDistance(22.54566,113.9479, 22.54542866619571, 113.94828826189041));
	}
	
}
